home *** CD-ROM | disk | FTP | other *** search
/ Clickx 115 / Clickx 115.iso / software / tools / windows / tails-i386-0.16.iso / live / filesystem.squashfs / etc / init.d / udev < prev    next >
Encoding:
Text File  |  2010-10-26  |  7.4 KB  |  320 lines

  1. #!/bin/sh -e
  2. ### BEGIN INIT INFO
  3. # Provides:          udev
  4. # Required-Start:    mountkernfs 
  5. # Required-Stop:     
  6. # Default-Start:     S
  7. # Default-Stop:
  8. # X-Interactive:     true
  9. # Short-Description: Start udevd, populate /dev and load drivers.
  10. ### END INIT INFO
  11.  
  12. # we need to unmount /dev/pts/ and remount it later over the tmpfs
  13. unmount_devpts() {
  14.   if mountpoint -q /dev/pts/; then
  15.     umount -n -l /dev/pts/
  16.   fi
  17.  
  18.   if mountpoint -q /dev/shm/; then
  19.     umount -n -l /dev/shm/
  20.   fi
  21. }
  22.  
  23. # mount a tmpfs over /dev, if somebody did not already do it
  24. mount_tmpfs() {
  25.   if grep -E -q "^[^[:space:]]+ /dev (dev)?tmpfs" /proc/mounts; then
  26.     mount -n -o remount,${dev_mount_options} -t tmpfs tmpfs /dev
  27.     return
  28.   fi
  29.  
  30.   if ! mount -n -o $dev_mount_options -t tmpfs tmpfs /dev; then
  31.     log_failure_msg "udev requires tmpfs support, not started."
  32.     log_end_msg 1
  33.   fi
  34.  
  35.   return 0
  36. }
  37.  
  38. create_dev_makedev() {
  39.   if [ -e /sbin/MAKEDEV ]; then
  40.     ln -sf /sbin/MAKEDEV /dev/MAKEDEV
  41.   else
  42.     ln -sf /bin/true /dev/MAKEDEV
  43.   fi
  44. }
  45.  
  46. supported_kernel() {
  47.   case "$(uname -r)" in
  48.     2.[012345].*|2.6.[0-9]|2.6.[0-9][!0-9]*) return 1 ;;
  49.     2.6.1[0-9]|2.6.1[0-9][!0-9]*) return 1 ;;
  50.     2.6.2[0-5]|2.6.2[0-5][!0-9]*) return 1 ;;
  51.   esac
  52.   return 0
  53. }
  54.  
  55. # shell version of /usr/bin/tty
  56. my_tty() {
  57.   [ -x /bin/readlink ] || return 0
  58.   [ -e /proc/self/fd/0 ] || return 0
  59.   readlink --silent /proc/self/fd/0 || true
  60. }
  61.  
  62. warn_if_interactive() {
  63.   if [ "$RUNLEVEL" = "S" -a "$PREVLEVEL" = "N" ]; then
  64.     return
  65.   fi
  66.  
  67.   TTY=$(my_tty)
  68.   if [ -z "$TTY" -o "$TTY" = "/dev/console" -o "$TTY" = "/dev/null" ]; then
  69.     return
  70.   fi
  71.  
  72.   printf "\n\n\nIt has been detected that the command\n\n\t$0 $*\n\n"
  73.   printf "has been run from an interactive shell.\n"
  74.   printf "It will probably not do what you expect, so this script will wait\n"
  75.   printf "60 seconds before continuing. Press ^C to stop it.\n"
  76.   printf "RUNNING THIS COMMAND IS HIGHLY DISCOURAGED!\n\n\n\n"
  77.   sleep 60
  78. }
  79.  
  80. create_dev_root_rule() {
  81.   local udevroot="$1"
  82.   [ -e $udevroot/rules.d/61-dev-root-link.rules ] && return 0
  83.  
  84.   eval $(udevadm info --export --export-prefix=ROOT_ --device-id-of-file=/ \
  85.     || true)
  86.   [ "$ROOT_MAJOR" -a "$ROOT_MINOR" ] || return 0
  87.  
  88.   echo 'ACTION=="add|change", SUBSYSTEM=="block", ENV{MAJOR}=="'$ROOT_MAJOR'", ENV{MINOR}=="'$ROOT_MINOR'", SYMLINK+="root"' \
  89.     > $udevroot/root-link-rule
  90.   mv $udevroot/root-link-rule $udevroot/rules.d/61-dev-root-link.rules
  91. }
  92.  
  93. ##############################################################################
  94.  
  95. [ -x /sbin/udevd ] || exit 0
  96.  
  97. PATH="/sbin:/bin"
  98.  
  99. # defaults
  100. tmpfs_size="10M"
  101. udev_root="/dev"
  102.  
  103. if [ -e /etc/udev/udev.conf ]; then
  104.   . /etc/udev/udev.conf
  105. fi
  106.  
  107. . /lib/lsb/init-functions
  108.  
  109. if ! supported_kernel; then
  110.   log_failure_msg "udev requires a kernel >= 2.6.26, not started."
  111.   log_end_msg 1
  112. fi
  113.  
  114. if [ ! -e /proc/filesystems ]; then
  115.   log_failure_msg "udev requires a mounted procfs, not started."
  116.   log_end_msg 1
  117. fi
  118.  
  119. if ! grep -q '[[:space:]]tmpfs$' /proc/filesystems; then
  120.   log_failure_msg "udev requires tmpfs support, not started."
  121.   log_end_msg 1
  122. fi
  123.  
  124. if [ ! -d /sys/class/ ]; then
  125.   log_failure_msg "udev requires a mounted sysfs, not started."
  126.   log_end_msg 1
  127. fi
  128.  
  129. if [ ! -e /sys/kernel/uevent_helper ]; then
  130.   log_failure_msg "udev requires hotplug support, not started."
  131.   log_end_msg 1
  132. fi
  133.  
  134. ##############################################################################
  135.  
  136. # this is experimental and may not work well
  137. if [ "$UDEV_DISABLED" = "yes" ]; then
  138.   udev_root=/etc/udev/.dev
  139.   export UDEV_ROOT=$udev_root
  140. fi
  141.  
  142. udev_root=${udev_root%/}
  143.  
  144. dev_mount_options='mode=0755'
  145. if [ "$tmpfs_size" ]; then
  146.   dev_mount_options="size=${tmpfs_size},${dev_mount_options}"
  147. fi
  148.  
  149. if [ "$udev_root" != "/dev" ]; then
  150.   log_warning_msg "udev_root != /dev/"
  151.  
  152. case "$1" in
  153.     start)
  154.     if [ -e "$udev_root/.udev/" ]; then
  155.     if mountpoint -q $udev_root/; then
  156.         log_failure_msg "udev is already active on $udev_root."
  157.         log_end_msg 1
  158.     else
  159.         log_warning_msg ".udev/ already exists on the static $udev_root!"
  160.     fi
  161.     fi
  162.  
  163.     echo > /sys/kernel/uevent_helper
  164.  
  165.     mount -n -o $dev_mount_options -t tmpfs tmpfs $udev_root
  166.  
  167.     log_daemon_msg "Starting the hotplug events dispatcher" "udevd"
  168.     if udevd --daemon; then
  169.     log_end_msg $?
  170.     else
  171.     log_end_msg $?
  172.     fi
  173.  
  174.     mkdir -p $udev_root/.udev/rules.d/
  175.     create_dev_root_rule $udev_root/.udev/
  176.  
  177.     log_action_begin_msg "Synthesizing initial hotplug events"
  178.     if udevadm trigger --action=add; then
  179.     log_action_end_msg $?
  180.     else
  181.     log_action_end_msg $?
  182.     fi
  183.  
  184.     ;;
  185.     stop)
  186.     log_daemon_msg "Stopping the hotplug events dispatcher" "udevd"
  187.     if start-stop-daemon --stop --name udevd --quiet --oknodo --retry 5; then
  188.     log_end_msg $?
  189.     else
  190.     log_end_msg $?
  191.     fi
  192.  
  193.     log_action_begin_msg "Unmounting $udev_root"
  194.     # unmounting with -l should never fail
  195.     if umount -n -l $udev_root; then
  196.     log_action_end_msg $?
  197.     else
  198.     log_action_end_msg $?
  199.     fi
  200.     ;;
  201.  
  202.     restart)
  203.     $0 stop
  204.     $0 start
  205.     ;;
  206.  
  207.     reload|force-reload)
  208.     udevadm control --reload-rules
  209.     ;;
  210.  
  211.     *)
  212.     echo "Usage: /etc/init.d/udev {start|stop|restart|reload|force-reload}"
  213.     exit 1
  214.     ;;
  215. esac
  216.  
  217.   exit 0
  218. fi # udev_root != /dev
  219.  
  220. ##############################################################################
  221.  
  222. # When modifying this script, do not forget that between the time that the
  223. # new /dev has been mounted and udevadm trigger has been run there will be
  224. # no /dev/null. This also means that you cannot use the "&" shell command.
  225.  
  226. case "$1" in
  227.     start)
  228.     if [ -e "$udev_root/.udev/" ]; then
  229.     if mountpoint -q $udev_root/; then
  230.         TMPFS_MOUNTED=1
  231.     else
  232.         log_warning_msg ".udev/ already exists on the static $udev_root!"
  233.     fi
  234.     else
  235.     warn_if_interactive
  236.     fi
  237.  
  238.     echo > /sys/kernel/uevent_helper
  239.  
  240.     if [ -z "$TMPFS_MOUNTED" ]; then
  241.     unmount_devpts
  242.     mount_tmpfs
  243.     [ -d /proc/1 ] || mount -n /proc
  244.     else
  245.     # and clean up the database of the initramfs udev
  246.     rm -rf /dev/.udev/
  247.     fi
  248.  
  249.     # set the SELinux context for devices created in the initramfs
  250.     [ -x /sbin/restorecon ] && /sbin/restorecon -R /dev
  251.  
  252.     # /dev/null must be created before udevd is started
  253.     /lib/udev/create_static_nodes || true
  254.  
  255.     log_daemon_msg "Starting the hotplug events dispatcher" "udevd"
  256.     if udevd --daemon; then
  257.     log_end_msg $?
  258.     else
  259.     log_end_msg $?
  260.     fi
  261.  
  262.     mkdir -p /dev/.udev/rules.d/
  263.     create_dev_root_rule /dev/.udev/
  264.  
  265.     log_action_begin_msg "Synthesizing the initial hotplug events"
  266.     if udevadm trigger --action=add; then
  267.     log_action_end_msg $?
  268.     else
  269.     log_action_end_msg $?
  270.     fi
  271.  
  272.     create_dev_makedev
  273.  
  274.     # wait for the udevd childs to finish
  275.     log_action_begin_msg "Waiting for /dev to be fully populated"
  276.     if udevadm settle; then
  277.     log_action_end_msg 0
  278.     else
  279.     log_action_end_msg 0 'timeout'
  280.     fi
  281.     ;;
  282.  
  283.     stop)
  284.     log_daemon_msg "Stopping the hotplug events dispatcher" "udevd"
  285.     if start-stop-daemon --stop --name udevd --quiet --oknodo --retry 5; then
  286.     log_end_msg $?
  287.     else
  288.     log_end_msg $?
  289.     fi
  290.     ;;
  291.  
  292.     restart)
  293.     log_daemon_msg "Stopping the hotplug events dispatcher" "udevd"
  294.     if start-stop-daemon --stop --name udevd --quiet --oknodo --retry 5; then
  295.     log_end_msg $?
  296.     else
  297.     log_end_msg $? || true
  298.     fi
  299.  
  300.     log_daemon_msg "Starting the hotplug events dispatcher" "udevd"
  301.     if udevd --daemon; then
  302.     log_end_msg $?
  303.     else
  304.     log_end_msg $?
  305.     fi
  306.     ;;
  307.  
  308.     reload|force-reload)
  309.     udevadm control --reload-rules
  310.     ;;
  311.  
  312.     *)
  313.     echo "Usage: /etc/init.d/udev {start|stop|restart|reload|force-reload}"
  314.     exit 1
  315.     ;;
  316. esac
  317.  
  318. exit 0
  319.  
  320.